/*********************************************************************************
  *Copyright (c)    2021   xldeng
  *FileName:        98.cpp.c
  *Author:          xldeng
  *Version:         1.0
  *Date:            2021/2/15 22:30
  *Description:     
  *Others:          
  *Function List:   
     1.…………
  *History:  
     1.Date:
       Author:
       Modification:
**********************************************************************************/
//给定一个二叉树，判断其是否是一个有效的二叉搜索树。
//
//假设一个二叉搜索树具有如下特征：
//
//节点的左子树只包含小于当前节点的数。
//节点的右子树只包含大于当前节点的数。
//所有左子树和右子树自身必须也是二叉搜索树。
#include "../header.h"

class Solution {
public:
    bool isValidBST(TreeNode *root) {
        return isValidBST(root, nullptr, nullptr);
    }

private:
    bool isValidBST(TreeNode *root, TreeNode *min, TreeNode *max) {
        if (root == nullptr)
            return true;
        if (max != nullptr && root->val >= max->val)
            return false;
        if (min != nullptr && root->val <= min->val)
            return false;
        return isValidBST(root->left,min,root) && isValidBST(root->right,root,max);
    }
};
